#include <iostream>

class Car  //抽象产品
{
public:
    virtual void show() = 0;
};

class BMW : public Car  //具体产品
{
public:
    BMW(int a){}
    void show()
    {
        std::cout << "一辆宝马" << std::endl;
    }
};


class Benz : public Car
{
public:
    Benz(double b){}
    void show()
    {
        std::cout << "一辆奔驰" << std::endl;
    }
};

class Audi : public Car
{
public:
    Audi(char c){}
    void show()
    {
        std::cout << "一辆奥迪" << std::endl;
    }
};

class Factory  //工厂类:负责生产具体的产品
{
public:
    Car * CreateBWM()
    {
        return new BMW(1);
    }

    Car * CreateBenz()
    {
        return new Benz(3.14);
    }

    Car * CreateAudi()
    {
        return new Audi('e');
    }
};

int main()
{
    //Car *c = new Benz(3);  //不再关心对象构建的方式
    Factory f;
    Car *c = f.CreateBWM();
    c->show();
    return 0;
}